import Taro from '@tarojs/taro'
import { STORAGE_PREFIX } from '@/config'

/**
 * 存储数据
 * @param key 键名
 * @param value 值
 * @param usePrefix 是否使用前缀
 */
export function setStorage(key: string, value: any, usePrefix = true): void {
  const storageKey = usePrefix ? `${STORAGE_PREFIX}${key}` : key
  try {
    Taro.setStorageSync(storageKey, value)
  } catch (error) {
    console.error('Storage 存储失败:', error)
  }
}

/**
 * 获取存储数据
 * @param key 键名
 * @param usePrefix 是否使用前缀
 * @param defaultValue 默认值
 */
export function getStorage<T = any>(key: string, usePrefix = true, defaultValue?: T): T | undefined {
  const storageKey = usePrefix ? `${STORAGE_PREFIX}${key}` : key
  try {
    const value = Taro.getStorageSync(storageKey)
    return value || defaultValue
  } catch (error) {
    console.error('Storage 获取失败:', error)
    return defaultValue
  }
}

/**
 * 移除存储数据
 * @param key 键名
 * @param usePrefix 是否使用前缀
 */
export function removeStorage(key: string, usePrefix = true): void {
  const storageKey = usePrefix ? `${STORAGE_PREFIX}${key}` : key
  try {
    Taro.removeStorageSync(storageKey)
  } catch (error) {
    console.error('Storage 移除失败:', error)
  }
}

/**
 * 清除所有存储数据
 */
export function clearStorage(): void {
  try {
    Taro.clearStorageSync()
  } catch (error) {
    console.error('Storage 清除失败:', error)
  }
}

/**
 * 获取所有存储数据
 */
export function getAllStorage(): Record<string, any> {
  try {
    return Taro.getStorageInfoSync().keys.reduce((acc, key) => {
      acc[key] = getStorage(key, false)
      return acc
    }, {} as Record<string, any>)
  } catch (error) {
    console.error('Storage 获取所有失败:', error)
    return {}
  }
}
